# # 设计一个自定义函数
#
# 实现功能如下：
#
# 针对一个只含数字的字符串，对其每3个数字进行一次翻转，如下：
#
# 字符串：123456789 == > 翻转后：321654987
#
# 如果最后待翻转的不足3个字符，也同样进行翻转，如下：
#
# 字符串：12345678 == > 翻转后：32165487
#
# * * *
#
# ### 【参考答案一】
#
# 你可以使用Python的切片和字符串拼接功能来实现这个函数。下面是一个示例：

def reverse_digits(s):
    # 将字符串转换为列表
    s = list(s)
    le = len(s)

    # 计算翻转的次数
    reverse_times, remainder = divmod(le, 3)

    # 翻转每3个数字，循环reverse_times次
    for i in range(reverse_times):
        start = i * 3
        end = start + 3
        s[start:end] = s[start:end][::-1]  # 翻转数字

    # 处理不足3个字符的部分
    if remainder == 0:
        # 将列表转换回字符串
        s = ''.join(s)
    else:
        start = reverse_times * 3
        end = reverse_times * 3 + remainder
        s[start:end] = s[start:end][::-1]  # 翻转数字
        # 将列表转换回字符串
        s = ''.join(s)

    return ''.join(map(str, s))


# 测试函数
print(reverse_digits('123456789'))  # 输出：321654987
print(reverse_digits('12345678'))  # 输出：32165487
#
# 这个函数首先将输入的字符串转换为列表，然后利用 ** `内置函数divmod()` ** 计算需要翻转的次数及不足3个字符的字符个数。接下来，它遍历列表，每次取出3个字符，进行翻转；然后处理不足3个字符的部分。最后，将翻转后的列表转换回字符串，并返回结果。
#
# ### 【参考答案二】
#
# 若翻转的字符个数由参数指定，代码修改如下：
#
# 如果你希望翻转的数字个数由参数指定，你可以修改函数，将需要翻转的数字个数作为一个参数传入。以下是一个示例：

def reverse_digits(s, num_digits=3):
    # 将字符串转换为列表
    s = list(s)

    # 计算翻转的次数
    reverse_times, remainder = divmod(len(s), num_digits)

    # 翻转每num_digits个数字
    for i in range(reverse_times):
        start = i * num_digits
        end = start + num_digits
        s[start:end] = s[start:end][::-1]  # 翻转数字

    # 处理不足3个字符的部分
    if remainder == 0:
        # 将列表转换回字符串
        s = ''.join(s)
    else:
        start = reverse_times * num_digits
        end = reverse_times * num_digits + remainder
        s[start:end] = s[start:end][::-1]  # 翻转数字
        # 将列表转换回字符串
        s = ''.join(s)

    return ''.join(map(str, s))


# 测试函数
print(reverse_digits('123456789', 2))  # 输出：214365879
print(reverse_digits('12345678'))  # 输出：32165487

# 在这个版本的函数中，`num_digits`
# 是一个参数，用于指定每次需要翻转的数字个数。如果你不传入
# `num_digits`
# 参数，默认值是3。

### 【参考答案三】

def func(s: str, n: int):
    lis = []
    d, m = divmod(len(s), n)

    for i in range(d):
        ss = i * n
        ee = ss + n
        sub = s[ss:ee]
        # lis.extend(list(reversed(sub)))
        lis.extend(sub[::-1])

    if m == 0:
        return ''.join(lis)
    else:
        sub = s[n * d:n * d + n]
        # lis.extend(list(reversed(sub)))
        lis.extend(sub[::-1])
        return ''.join(lis)


# ----------------------------------
# 以脚本方式运行
if __name__ == '__main__':
    st = '12345678'
    result = func(st, 4)
    print(result)